#pragma once
#include "SSLConfig.hpp"
#include <openssl/ssl.h>
#include <memory>
#include <muduo/base/noncopyable.h>


namespace ssl
{
    class SSLContext: public muduo::noncopyable
    {
    private:
        SSLConfig _config;
        SSL_CTX *_ctx;
    public:
       explicit SSLContext(const SSLConfig &config);
        ~SSLContext();
        
        bool init();//初始化
        SSL_CTX *getNativeContext(){return _ctx;}//获取原生上下文


    private:
        bool loadCertFile();//加载证书文件
        bool setupProtocol();//设置协议
        void setupSessionCache();//设置会话缓存
        static void handleSSLError(const char* err);//处理SSL错误
    };
}